package top.bug.blog.enums;

import lombok.Getter;

/**
 * @author <a href="https://github.com/jiusi66">九思.</a>
 * @email 10837907@qq.com
 * @from <a href="https://www.52bug.top">递归茶馆-www.52bug.top</a>
 * @description 接口限流预定义枚举
 */
@Getter
public enum RateLimitEnum {

    /**
     * 占位枚举—未指定
     */
    UNSPECIFIED_LIMIT("", 0, 0, 0),

    /**
     * 点赞限流策略
     */
    LIKE_LIMIT("limit:like:", 8, 10, 30),
    /**
     * 发布评论限流策略
     */
    COMMENT_LIMIT("limit:comment:", 8, 60, 180),
    /**
     * 查询限流策略（key为空，默认取方法名，防止所有查询接口共用一套限流统计）
     */
    QUERY_LIMIT("", 8, 10, 30);


    /**
     * 限流键前缀
     */
    final String key;

    /**
     * 时间窗口内最大请求数
     */
    final int maxAttempts;

    /**
     * 时间窗口（秒）
     */
    final int timeWindow;

    /**
     * 超限后屏蔽时间（秒）
     */
    final int blockDuration;

    RateLimitEnum(String key, int maxAttempts, int timeWindow, int blockDuration) {
        this.key = key;
        this.maxAttempts = maxAttempts;
        this.timeWindow = timeWindow;
        this.blockDuration = blockDuration;
    }

}
